package genetica.mutacion;

import java.util.Random;

import genetica.cromosomas.Cromosoma;
import genetica.cromosomas.CromosomaPG;
import genetica.cromosomas.fenotipos.fenotipoPG.TreePG;

public class MutacionTerminalSimple extends AlgoritmoMutacion {

	public MutacionTerminalSimple(double pMutacion) {
		super(pMutacion);
	}

	static Random r = new Random();

	@Override
	public void mutacion(Cromosoma original) {
		if (original instanceof CromosomaPG) {
			CromosomaPG cromosoma = (CromosomaPG) original;
			TreePG arbol = cromosoma.getGenotipo().getArbol();
			mutaArbol(arbol);
		} else
			throw new Error("Cromosoma invalido");
	}

	private void mutaArbol(TreePG arbol) {
		Double mutando = r.nextDouble();
		if (arbol.esHoja()) {
			if (mutando < pMutacion) {
				int nuevoNodoPos = r.nextInt(3);
				arbol.setNodo(CromosomaPG.nodos[nuevoNodoPos]);
			}
		} else {
			for (int i = 0; i < arbol.getHijos().size(); i++) {

			}
		}

	}
	public String toString(){
		return "Algoritmo de mutacion terminal simple";
	}


}
